package com.matrix.lbs.service;

import com.matrix.api.lbs.dto.ShopInfoUpdateDTO;
import com.matrix.api.lbs.vo.NearbyShopWithInfoVO;
import com.matrix.common.domain.PageResult;

import java.util.List;

/**
 * @author 有点甜
 * @since 2025/7/25
 */
public interface LbsService {

    /**
     * 更新店铺信息
     *
     * @param dto 店铺信息
     */
    void upsertShopDocument(ShopInfoUpdateDTO dto);

    /**
     * 查找附近的店铺
     *
     * @param latitude     纬度
     * @param longitude    经度
     * @param distanceInKm 范围
     * @param sortType     排序类型
     * @return 附近的店铺
     */
    List<NearbyShopWithInfoVO> findNearbyShops(double latitude, double longitude, double distanceInKm, String sortType);

    /**
     * 搜索店铺
     *
     * @param keyword   关键词
     * @param pageNum   页码
     * @param pageSize  页大小
     * @param latitude  纬度
     * @param longitude 经度
     * @param sortType  排序类型
     * @return 店铺列表
     */
    PageResult<NearbyShopWithInfoVO> searchShops(String keyword, int pageNum, int pageSize, Double latitude, Double longitude, String sortType);

    /**
     * 获取搜索建议
     *
     * @param prefix 搜索词前缀
     * @return 搜索建议列表
     */
    List<String> getSearchSuggestions(String prefix);

    /**
     * 获取推荐的店铺
     * @param userId 用户id
     * @param latitude 纬度
     * @param longitude 经度
     * @param pageNum 页码
     * @param pageSize 页大小
     * @return 推荐的店铺列表
     */
    PageResult<NearbyShopWithInfoVO> findRecommendedShops(Long userId, double latitude, double longitude, int pageNum, int pageSize);
}
